package com.itcam.web.job;

import cn.hutool.core.util.StrUtil;
import com.itcam.web.manager.CosManager;
import com.itcam.web.mapper.GeneratorMapper;
import com.itcam.web.model.entity.Generator;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

@Component
@Slf4j
public class ClearCosJobHandler {

    @Resource
    private CosManager cosManager;

    @Resource
    private GeneratorMapper generatorMapper;

    /**
     * 每天执行的定时任务，用于清理 COS（Cloud Object Storage）中的相关文件。
     *
     * @throws InterruptedException 当线程在等待过程中被中断时抛出此异常
     * @throws Exception 该方法声明抛出通用异常，但实际代码中未明确抛出特定异常，可考虑细化异常类型
     */
    @XxlJob("clearCosJobHandler")
    public void clearCosJobHandler() throws Exception {
        // 记录任务开始日志
        log.info("clearCosJobHandler start");

        // 编写业务逻辑
        // 1. 包括用户上传的模板制作文件（generator_make_template）
        // 调用 CosManager 的 deleteDir 方法删除指定目录下的所有文件
        cosManager.deleteDir("/generator_make_template/");

        // 2. 已删除的代码生成器对应的产物包文件（generator_dist）。
        // 从数据库中查询已删除的代码生成器列表
        List<Generator> generatorList = generatorMapper.listDeletedGenerator();
        // 从生成器列表中提取产物包文件的路径，并进行过滤和处理
        List<String> keyList = generatorList.stream().map(Generator::getDistPath)
                .filter(StrUtil::isNotBlank)
                // 移除路径中的 '/' 前缀
                .map(distPath -> distPath.substring(1))
                .collect(Collectors.toList());

        // 调用 CosManager 的 deleteObjects 方法批量删除指定的文件
        cosManager.deleteObjects(keyList);

        // 记录任务结束日志
        log.info("clearCosJobHandler end");
    }


}
